public class integerBreak {
    /**
 * 将给定的正整数n拆分成至少两个正整数的和，使得这些数的乘积最大化，并返回最大化的乘积值
 *
 * @param n 待拆分的正整数
 * @return 拆分后得到的最大乘积
 */
public int integerBreak(int n) {
    // 对于小于等于3的整数，直接返回n-1，因为题目要求至少拆分成两个数，而拆分成1和n-1时乘积最大
    if(n <= 3) return n - 1;

    // a是n除以3的商，b是余数
    int a = n / 3, b = n % 3;

    // 如果余数为0，说明n可以被3整除，此时将n拆分成a个3时乘积最大
    if(b == 0) return (int)Math.pow(3, a);

    // 如果余数为1，说明将n拆分成a个3和一个1不是最优解，因为一个3和一个1的乘积为3，而拆分成两个2的乘积为4，更大
    // 因此，将其中一个3和余下的1合并成4，这样乘积更大
    if(b == 1) return (int)Math.pow(3, a - 1) * 4;

    // 如果余数为2，说明将n拆分成a个3和一个2时乘积最大，因为2比1更大，这样可以得到更大的乘积
    return (int)Math.pow(3, a) * 2;
}

}
